Systematic Testing of Multithreaded Programs
نویسندگان
چکیده
We present a practical testing algorithm called ExitBlock that systematically and deterministically nds program errors resulting from unintended timing dependencies. ExitBlock executes a program or a portion of a program on a given input multiple times, enumerating meaningful schedules in order to cover all program behaviors. Previous work on systematic testing focuses on programs whose concurrent elements are processes that run in separate memory spaces and explicitly declare what memory they will be sharing. ExitBlock extends previous approaches to multithreaded programs in which all of memory is potentially shared. A key challenge is to minimize the number of schedules executed while still guaranteeing to cover all behaviors. Our approach relies on the fact that for a program following a mutual-exclusion locking discipline, enumerating possible orders of the synchronized regions of the program covers all possible behaviors of the program. We describe in detail the basic algorithm and extensions to take advantage of readwrite dependency information and to detect deadlocks.
منابع مشابه
The Challenges in Automated Testing of Multithreaded Programs
To take full advantage of parallel architectures, programmers need to be presented with a good set of software tools for developing, debugging, testing, and maintaining their parallel programs. This paper focuses on the challenges that need to be addressed to provide automatic generation of test cases for multithreaded programs , particularly focusing on a program-based, structural testing appr...
متن کاملMultithreaded Dependence Graphs for Concurrent Java Programs
Understanding program dependencies in a computer program is essential for many software engineering activities including program slicing, testing, debugging, reverse engineering, and maintenance. In this paper, we present a dependence-based representation called multithreaded dependence graph, which extends previous dependence-based representations, to represent program dependencies in a concur...
متن کاملSystematic Ranking of Thread Schedules for Testing Multithreaded Programs
Concurrency is used pervasively in the development of large programs. However, testing concurrent programs is notoriously hard due to the inherent non-determinism. Recently, many different techniques have been proposed to identify concurrency-related bugs early. An effective but expensive approach is model-checking, where all possible schedules of a program are executed to ascertain the absence...
متن کاملDetecting Fair Non-termination in Multithreaded Programs
We develop compositional analysis algorithms for detecting nontermination in multithreaded programs. Our analysis explores fair and ultimatelyperiodic executions—i.e., those in which the infinitely-often enabled threads repeatedly execute the same sequences of actions over and over. By limiting the number of context-switches each thread is allowed along any repeating action sequence, our algori...
متن کاملInstrumentation Technique for Online Analysis of Multithreaded Programs
This paper presents an automatic code instrumentation technique, based on multithreaded vector clocks, for extracting the causal partial order on relevant state update events from a running multithreaded program. This technique is used in a formal testing environment, not only to detect, but especially to predict safety errors in multithreaded programs. The prediction process consists of rigoro...
متن کاملذخیره در منابع من
با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید
عنوان ژورنال:
دوره شماره
صفحات -
تاریخ انتشار 2000